☁️ cloud | June 08, 2021
엔드포인트 서비스 기능을 활용하여, 사용자가 생성한 VPC와 프라이빗 연결을 확인하고 통신되는 과정을 실습
AWS 인프라 자원을 생성할 [YAML 파일]
NLB: 데이터의 부하를 분산해 주는 역할의 서비스 / 인스턴스로 데이터를 분산하여 전달
Parameters:
KeyName:
Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
Type: AWS::EC2::KeyPair::KeyName
ConstraintDescription: must be the name of an existing EC2 KeyPair.
LatestAmiId:
Description: (DO NOT CHANGE)
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
AllowedValues:
- /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: MyVPC
CustomVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 20.0.0.0/16
Tags:
- Key: Name
Value: CustomVPC
MyIGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: My-IGW
CustomIGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: Custom-IGW
MyIGWAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId: !Ref MyIGW
VpcId: !Ref MyVPC
CustomIGWAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId: !Ref CustomIGW
VpcId: !Ref CustomVPC
MyPublicRT:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: My-Public-RT
MyDefaultPublicRoute:
Type: AWS::EC2::Route
DependsOn: MyIGWAttachment
Properties:
RouteTableId: !Ref MyPublicRT
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref MyIGW
CustomPublicRT:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CustomVPC
Tags:
- Key: Name
Value: Custom-Public-RT
CustomDefaultPublicRoute:
Type: AWS::EC2::Route
DependsOn: CustomIGWAttachment
Properties:
RouteTableId: !Ref CustomPublicRT
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref CustomIGW
MyPublicSN:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
AvailabilityZone: !Select [0, !GetAZs '']
CidrBlock: 10.0.0.0/24
Tags:
- Key: Name
Value: My-Public-SN
CustomPublicSN:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref CustomVPC
AvailabilityZone: !Select [0, !GetAZs '']
CidrBlock: 20.0.0.0/24
Tags:
- Key: Name
Value: Custom-Public-SN
MyPublicSNRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref MyPublicRT
SubnetId: !Ref MyPublicSN
CustomPublicSNRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref CustomPublicRT
SubnetId: !Ref CustomPublicSN
WebSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: WebSG
VpcId: !Ref MyVPC
GroupName: WebSG
Tags:
- Key: Name
Value: WebSG
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: 0.0.0.0/0
CustomWebSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: CustomSG
VpcId: !Ref CustomVPC
GroupName: CustomSG
Tags:
- Key: Name
Value: Custom-WebSG
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: 0.0.0.0/0
MyEC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: My-EC2
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref MyPublicSN
GroupSet:
- !Ref WebSG
AssociatePublicIpAddress: true
CustomWeb1EC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: Custom-WEB-1
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref CustomPublicSN
GroupSet:
- !Ref CustomWebSG
AssociatePublicIpAddress: true
UserData:
Fn::Base64: !Sub |
#!/bin/bash
(
echo "qwe123"
echo "qwe123"
) | passwd --stdin root
sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
service sshd restart
yum install -y httpd
systemctl start httpd && systemctl enable httpd
echo "<html><h1>Endpoint Service Lab - CloudNeta Web Server 1</h1></html>" > /var/www/html/index.html
CustomWeb2EC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: Custom-WEB-2
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref CustomPublicSN
GroupSet:
- !Ref CustomWebSG
AssociatePublicIpAddress: true
UserData:
Fn::Base64: !Sub |
#!/bin/bash
(
echo "qwe123"
echo "qwe123"
) | passwd --stdin root
sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
service sshd restart
yum install -y httpd
systemctl start httpd && systemctl enable httpd
echo "<html><h1>Endpoint Service Lab - CloudNeta Web Server 2</h1></html>" > /var/www/html/index.html
CustomNLBTG:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: Custom-NLB-TG
Port: 80
Protocol: TCP
VpcId: !Ref CustomVPC
Targets:
- Id: !Ref CustomWeb1EC2
Port: 80
- Id: !Ref CustomWeb2EC2
Port: 80
CustomNLB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Type: network
Scheme: internet-facing
Subnets:
- !Ref CustomPublicSN
Tags:
- Key: Name
Value: Custom-NLB
NLBListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref CustomNLBTG
LoadBalancerArn: !Ref CustomNLB
Port: 80
Protocol: TCP
NLB 자원에 대한 정상적인 서비스 상태를 확인 후 검증
실습을 위해 Custom-NLB의 DNS 주소 먼저 확인
MyVPC에서 CustomVPC - NLB DNS의 IP주소 확인, 웹 통신 확인
엔드포인트 서비스 생성 확인
생성된 엔드포인트 확인
MyVPC의 EC2 인스턴스에서 통신을 확인
dig
, curl
명령어를 DNS의 주소를 통해 검증